From: Jasper St. Pierre Date: Wed, 28 Nov 2012 22:27:41 +0000 (-0500) Subject: scroll-bar: Add smooth scrolling support X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~5185 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=f162dd7e87874d2aeada1cf0b040fb5667ef333e;p=gnome-shell.git scroll-bar: Add smooth scrolling support Do the same for StScrollBar. https://bugzilla.gnome.org/show_bug.cgi?id=687573 --- diff --git a/src/st/st-scroll-bar.c b/src/st/st-scroll-bar.c index 2e1f125c6..f908101dd 100644 --- a/src/st/st-scroll-bar.c +++ b/src/st/st-scroll-bar.c @@ -433,42 +433,57 @@ st_scroll_bar_constructor (GType type, return obj; } +static void +adjust_with_direction (StAdjustment *adj, + ClutterScrollDirection direction) +{ + gdouble delta; + + switch (direction) + { + case CLUTTER_SCROLL_UP: + case CLUTTER_SCROLL_LEFT: + delta = -1.0; + break; + case CLUTTER_SCROLL_RIGHT: + case CLUTTER_SCROLL_DOWN: + delta = 1.0; + break; + case CLUTTER_SCROLL_SMOOTH: + g_assert_not_reached (); + break; + } + + st_adjustment_adjust_for_scroll_event (adj, delta); +} + static gboolean st_scroll_bar_scroll_event (ClutterActor *actor, ClutterScrollEvent *event) { StScrollBarPrivate *priv = ST_SCROLL_BAR (actor)->priv; - gdouble step, value, delta_x, delta_y; - if (priv->adjustment) - { - g_object_get (priv->adjustment, - "step-increment", &step, - "value", &value, - NULL); - } - else - { - return FALSE; - } + if (clutter_event_is_pointer_emulated ((ClutterEvent *) event)) + return TRUE; switch (event->direction) { case CLUTTER_SCROLL_SMOOTH: - clutter_event_get_scroll_delta ((ClutterEvent *)event, - &delta_x, &delta_y); - if (fabs (delta_x) > fabs (delta_y)) - st_adjustment_set_value (priv->adjustment, value + delta_x); - else - st_adjustment_set_value (priv->adjustment, value + delta_y); + { + gdouble delta_x, delta_y; + clutter_event_get_scroll_delta ((ClutterEvent *)event, &delta_x, &delta_y); + + if (priv->vertical) + st_adjustment_adjust_for_scroll_event (priv->adjustment, delta_y); + else + st_adjustment_adjust_for_scroll_event (priv->adjustment, delta_x); + } break; case CLUTTER_SCROLL_UP: - case CLUTTER_SCROLL_LEFT: - st_adjustment_set_value (priv->adjustment, value - step); - break; case CLUTTER_SCROLL_DOWN: + case CLUTTER_SCROLL_LEFT: case CLUTTER_SCROLL_RIGHT: - st_adjustment_set_value (priv->adjustment, value + step); + adjust_with_direction (priv->adjustment, event->direction); break; }